#!/usr/bin/env python
#-*- coding:utf-8 -*-

from Tarea import *
from Tesauro import *

# Transforma lineas que contienen solo palabras en minusculas separadas por espacios en una lista de lineas separadas por espacios que son o raices de verbos o palabras sueltas.
# TODO las palabras sueltas deberian ser solo sustantivos.

class ExtraerVerbosYSustantivos(Tarea):
	def __init__(self, nombre, entrada = None, noLeer = None, salida = None, log = None, errores = None, tesauro = None ):
		Tarea.__init__(self, nombre, entrada, noLeer, salida, log, errores)

		if (tesauro == None):
			tesauro = Tesauro()

		self.sufijos = tesauro.sufijosVerbales
		self.ser = tesauro.ser
		self.haber = tesauro.haber
		self.adjetivos = tesauro.adjetivos

	def process(self, linea, nReg):
		filtrada = linea.strip().lower()
		partes = filtrada.split(' ');
		resultado = list()

		conError = Tarea.NOERROR
		try:
			for p in partes:
				esVerbo = False
				if (p == None) or (p == ''):
					continue
				if p in self.ser:
					esVerbo = True
					resultado.append('ser')
				elif p in self.haber:
					esVerbo = True
					resultado.append('haber')
				else:
					# Por cada sufijo, veo si la palabra no coincide con la forma "raiz"+sufijo.
					for s in self.sufijos:
						aux = p.rsplit(s,1)
						if (len(aux) == 1):
							# Si el split solo obtiene un elemento (la palabra termina con el sufijo).
							raiz = aux[0]
							# Si raiz no es nula, y contiene el sufijo (si no esta el sufijo cortaria la palabra).
							if (len(raiz)> 0) and (len(raiz) < len(p)):
								esVerbo = True
								resultado.append(raiz)
				if not esVerbo:
					if ( (not p in self.adjetivos) and (len(p) > 3) ):
						# Forma de determinar si es un sustantivo o no.
						#  - Es mas facil determinar si no es un adjetivo. (por los nombres propios).
						resultado.append(p)
			if len(resultado) > 0:
				self.salida.write(' '.join(resultado)+'\n')
		except Exception as e:
			self.log.error(e)
			conError = Tarea.ERROR
		return conError

if __name__ == '__main__':
	pass

